import { ElMessage } from "element-plus";
import type { AxiosError } from "axios";

/**
 * 统一的API错误处理函数
 * @param error 错误对象
 * @param customMessage 自定义错误消息
 * @param callback 错误处理后的回调函数
 */
export function handleApiError(
  error: unknown,
  customMessage?: string,
  callback?: () => void
): void {
  if (error instanceof Error) {
    const axiosError = error as AxiosError<{ msg?: string }>;
    if (axiosError.response?.data?.msg) {
      ElMessage.error(axiosError.response.data.msg);
    } else {
      ElMessage.error(error.message);
    }
  } else {
    ElMessage.error("操作失败");
  }

  // 执行回调函数
  if (callback && typeof callback === "function") {
    callback();
  }
}

/**
 * 表单提交错误处理函数
 * @param error 错误对象
 * @param formName 表单名称
 */
export function handleFormError(error: any, formName: string): void {
  const errorMessage = `${formName}提交失败`;
  handleApiError(error, errorMessage);
}

/**
 * 数据加载错误处理函数
 * @param error 错误对象
 * @param dataName 数据名称
 */
export function handleLoadError(error: any, dataName: string): void {
  const errorMessage = `加载${dataName}失败`;
  handleApiError(error, errorMessage);
}

/**
 * 参数校验错误处理函数
 * @param message 错误消息
 */
export function handleValidationError(errorMessage: string): void {
  ElMessage.warning(errorMessage);
}
